@echo off
chcp 65001 > nul
setlocal enabledelayedexpansion

REM 设置环境变量
set "BUILD_DIR=build\exe"
set "SUCCESS=0"

echo ===== 云打印系统构建工具 =====

REM 检查 Python 环境
python --version > nul 2>&1
if %ERRORLEVEL% neq 0 (
    echo [错误] 未找到 Python。请确保 Python 已安装并添加到 PATH 中。
    exit /b 1
)

echo [信息] 检测到 Python 环境。

REM 检查build目录是否被锁定
echo [信息] 检查构建目录状态...
if exist "%BUILD_DIR%" (
    REM 尝试删除旧的构建目录
    rd /s /q "%BUILD_DIR%" 2>nul
    if exist "%BUILD_DIR%" (
        echo [警告] 无法删除旧的构建目录，可能被其他进程锁定
        echo [信息] 尝试关闭可能锁定目录的进程...
        taskkill /f /im cloud_print_service.exe >nul 2>&1
        taskkill /f /im cloud_print_app.exe >nul 2>&1
        timeout /t 2 >nul
        rd /s /q "%BUILD_DIR%" 2>nul
        if exist "%BUILD_DIR%" (
            echo [警告] 仍然无法清理构建目录，将继续尝试构建
        ) else (
            echo [信息] 成功清理旧的构建目录
        )
    ) else (
        echo [信息] 成功清理旧的构建目录
    )
)

REM 创建构建目录（如果不存在）
if not exist "%BUILD_DIR%" (
    mkdir "%BUILD_DIR%"
    echo [信息] 创建构建目录：%BUILD_DIR%
)

REM 检查必要的Python模块是否已安装
echo [信息] 检查必要的Python模块...
python -c "import fastapi, uvicorn" >nul 2>&1
if %ERRORLEVEL% neq 0 (
    echo [警告] 一些必要的模块可能未安装，但将继续构建过程。
    echo [信息] 本次构建将包含所有必要的模块，不会从网络下载。
) else (
    echo [信息] 必要的模块已安装，继续构建过程。
)

REM 构建可执行文件
echo [信息] 开始构建可执行文件...
python setup.py build
if %ERRORLEVEL% neq 0 (
    echo [错误] 构建失败。请检查上面的错误消息。
    echo [信息] 如果问题是"build_exe directory cannot be cleaned"，请尝试重启计算机或手动删除build目录。
    exit /b 1
)

echo [信息] 构建成功完成。

REM 创建必要的目录
echo [信息] 正在创建必要的目录...
md "%BUILD_DIR%\logs" 2>nul
md "%BUILD_DIR%\temp" 2>nul
md "%BUILD_DIR%\queue" 2>nul
md "%BUILD_DIR%\watch_folder" 2>nul
md "%BUILD_DIR%\print_status" 2>nul
echo [信息] 目录创建完成。

REM 复制配置文件
if not exist "%BUILD_DIR%\config.ini" (
    copy "config.ini" "%BUILD_DIR%\config.ini" > nul
    if %ERRORLEVEL% equ 0 (
        echo [信息] 已复制配置文件到构建目录
    ) else (
        echo [警告] 无法复制配置文件
    )
)

REM 复制批处理文件到构建目录（如果没有在setup.py中指定）
echo [信息] 正在确保辅助文件在构建目录中...

REM 检查并复制所需文件
set "FILES_TO_CHECK=install_service.bat uninstall_service.bat create_shortcut.py create_shortcut.bat"
for %%f in (%FILES_TO_CHECK%) do (
    if not exist "%BUILD_DIR%\%%f" (
        copy "%%f" "%BUILD_DIR%\%%f" > nul
        if !ERRORLEVEL! equ 0 (
            echo [信息] 已复制 %%f
            set "SUCCESS=1"
        ) else (
            echo [警告] 无法复制 %%f 文件
        )
    ) else (
        echo [信息] %%f 已存在于构建目录中
        set "SUCCESS=1"
    )
)

if "!SUCCESS!"=="1" (
    echo [成功] 所有文件已成功构建并复制到 %BUILD_DIR% 目录
    echo [信息] 您现在可以运行 install_service.bat 来安装服务，或者运行 cloud_print_app.exe 来启动应用程序
) else (
    echo [警告] 构建完成，但一些文件可能缺失
)

echo ===== 构建过程完成 =====

endlocal 